#include "usart.h"


//
//@简介：初始化usart1串口
//
void usart1_Init()
{
	//初始化引脚 PA9-TX，PA10-RX
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);
	
	GPIO_InitTypeDef GPIO_InitStruct = {0};
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_9;
	GPIO_InitStruct.GPIO_Speed = GPIO_Speed_2MHz;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_AF_PP;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	GPIO_InitStruct.GPIO_Pin = GPIO_Pin_10;
	GPIO_InitStruct.GPIO_Mode = GPIO_Mode_IPU;
	GPIO_Init(GPIOA,&GPIO_InitStruct);
	
	//开启USART1时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1,ENABLE);
	//初始化USART1的参数
	USART_InitTypeDef USART_InitStruct = {0};
	USART_InitStruct.USART_BaudRate = 115200;
	USART_InitStruct.USART_HardwareFlowControl = DISABLE;
	USART_InitStruct.USART_WordLength = USART_WordLength_8b;
	USART_InitStruct.USART_StopBits = USART_StopBits_1;
	USART_InitStruct.USART_Parity = USART_Parity_No;
	USART_InitStruct.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;
	
	USART_Init(USART1,&USART_InitStruct);
	//使能USART1
	USART_Cmd(USART1,ENABLE);
}

//
//@简介：使用USART1发送字节
//
void send_byte(uint8_t byte)
{
	USART_SendData(USART1,byte);
	while(USART_GetFlagStatus(USART1,USART_FLAG_TXE) == RESET);
}

//
//@简介：使用USART1发送字符串
//
void send_string(uint8_t *string)
{
	while(*string != '\0')
	{
		send_byte(*string++);
	}
}	

//
//@简介：使用USART1发送一组数据
//
void send_buff(uint8_t* buff,uint16_t len)
{
	for(uint16_t i=0; i<len; i++)
	{
		send_byte(buff[i]);
	}
}
